package com.twq.oo.abstractscls.second

/**
 * Created by tangweiqun on 2017/11/28.
 *
 */
abstract class Element {
  def contents: Array[String]

  def width: Int = contents(0).length

  def height: Int =
    if (height == 0) 0 else contents(0).length
}

class ArrayElement(
                    val contents: Array[String]
                  ) extends Element {

  //final也可以修饰类，使得修饰的这个类不能被继承
  final def testFinal() = println("test final")
}

//1、继承一个需要构造参数的父类，我们需要将参数传给父类的构造器
class LineElement(s: String) extends ArrayElement(Array(s)) {
  //2、使用override来重写父类的方法
  //2.1、不能重写父类没有的饿方法
  //override def high = 1 //编译不过

  //2.2、使用final来修饰方法，使得这个方法不能被子类重写
  //如果一个类被final修饰的话，那这个类不能被继承
  //override def testFinal() = println("sub println") //编译不过

  override def width = s.length

  override def height = 1
}

object Spiral {
  def main(args: Array[String]): Unit = {
    //编译不过
    //new Element

    val ele = new ArrayElement(Array("sss"))
    println(ele.width)
    println(ele.height)
  }
}